This invention relates to systems that display three-dimensional images. More particularly, this invention relates to frame buffers and the transfer of image data in such systems.
Conventional three-dimensional (“3D”) graphics typically result in two-dimensional images displayed on conventional two-dimensional computer monitors (e.g., cathode ray tubes (CRT), liquid crystal displays (LCD), plasma displays, etc.). The process involves rendering the spatial geometry and corresponding lighting and texture information of a 3D scene (or other 3D object) represented by an image into a relatively small frame buffer. Instructions that describe this rendering are typically generated by a computer (e.g., a personal computer). The instructions are transmitted to a video board typically present in the computer. The video board processes the instructions to convert the 3D scene into pixel data and transfers this data to the display or monitor. Pixel data indicates the location, color, and sometimes the brightness of a pixel. A pixel (i.e., a picture element) is one spot in a grid of thousands of such spots that form an image. It is also the smallest element manipulated by display hardware and software.
Instructions describing an image are often created using an application programming interface (API) such as openGL® or Microsoft's Direct3D®. An API typically describes a scene by defining the spatial geometry, lighting, color, and surface textures of objects in the scene. The geometry may include an array of vertices, or points, each having x, y, and z coordinates, where the z-coordinate represents depth. Each vertex may further include red, green, and blue (RGB) color values, and transparency (alpha) values. Additional arrays may contain lists of vertex indices to describe how the vertices may be combined to form triangles or polygons of x, y, and z coordinates. These triangles or polygons form the fundamental geometric primitives of 3D surfaces, and when used with other triangles or polygons, can describe virtually any two or three dimensional image.
Once generated, API instructions are transmitted to the video board. The video board subsequently performs, if necessary, various transformations, such as geometric (e.g., rotation, scale, or any suitable combination), perspective, or viewport.
After receiving the API instructions and performing any needed or desired transformations, the video board rasterizes the images. Rasterization is the conversion of vector graphics (images described in terms of vertices and lines) to equivalent images composed of pixel patterns that can be stored and manipulated as sets of bits. During rasterization, the color of pixels bounded by the surface primitives (i.e., the triangles or polygons) are computed. In order to perform this computation, conventional algorithms are employed for three-dimensional interpolation of an interior pixel from the RBG values of the vertices. The interpolated values at each pixel location are known as image fragments.
Additionally, if a z value is provided, the video board may remove occluded pixels. A pixel is occluded if it is spatially located behind an opaque pixel. A pixel is located behind another pixel if it is has a higher z value.
If a foreground pixel is not opaque (i.e., the alpha value for the pixel is less than 1), the video board may perform an alpha blend operation. An alpha blend operation blends the RGB values of the overlapping pixels to produce a pixel with a new RGB value that takes into account the alpha contribution of each pixel. In conventional systems, alpha blending involves combining the brightness and/or color values of pixels already in the frame buffer into the memory location of the pixel to be displayed.
To accomplish these operations, a video board typically includes a graphics processing unit (GPU), a frame buffer, and an optional digital-to-analog converter. The GPU receives API instructions from the computer, and performs the above-described transformations and rasterizations. Data from the GPU is then output to the frame buffer. The frame buffer is usually a small capacity memory. Typically, data is stored in the frame buffer based only on the x and y coordinates. After the GPU performs occluded pixel removal and alpha blending, the data is output from the frame buffer to the display. In the case of analog displays, the data may be first converted by a digital-to-analog converter.
Although this arrangement may be adequate for two-dimensional displays, it is inadequate for systems employing three-dimensional volumetric displays and systems that require a large number of three dimensional images to be displayed. In particular, conventional frame buffers are inadequate because they lack the capacity and data organization to store (x,y,z) coordinate image data such that satisfactory three-dimensional images can be displayed.
In view of the foregoing, it would be desirable to be able to provide a frame buffer that has the capacity to store and quickly transfer image data organized such that satisfactory three-dimensional images can be displayed.